/**
 * PortalPanel 组件. *
 * 
 * @param homepageData
 *            e.g. new myPortalPanel(homepageData);
 */
function debugObj(obj) {
	var s = "";
	for (k in obj) {
		s += k + "=" + obj[k] + "\n";
	}
	alert(s);
}
function myPortalPanel() {// 构建portal的数据
}
// 判断移动位置是否合适，下面的写法，想法我觉得比较经典
var validatedropFn = function(e) {
	if (this.layoutInfo.columns == 3) {
		// 中间列不能向左右两边列移 false
		if (e.panel.col == 2 && e.columnIndex != 1)
			return false;
		// 两边列不能向中间列移 false
		if (e.columnIndex == 1 && e.panel.col != 2)
			return false;
	}
	if (this.layoutInfo.columns == 2) {
		if (e.panel.col == 1 && e.columnIndex != 0)// 窄的不能往宽的拖
			return false;
		if (e.columnIndex == 0 && e.panel.col != 1) {// 宽列不能往窄列拖
			return false;
		}
	}
	return true;
};
// Ext.ux.Portal 在ext-portal里面Portal.js
Ext.extend(myPortalPanel, Ext.ux.Portal, { // 组件继承自

	id : 'myPortalPanel',
	/* 默认布局排列信息 */
	layoutInfo : {
		columns : 3, // 默认3列
		columnSize : [0.33, 0.33, 0.33]
	},
	// autoWidth : true,// 这样是没有了横向滚动条，但是左边给顶出去了
	listeners : {
		'validatedrop' : validatedropFn
	},

	/**
	 * 初始化组件 方法 new 的时候调用
	 * 
	 */
	initComponent : function() {
		myPortalPanel.superclass.initComponent.call(this);
		this._init();
		this._buildPortal();
	},

	/**
	 * 初始化基本信息,初始化外围基本信息
	 * 
	 */
	_init : function() {
		this.name = model.name;
		this.title = model.title;
		this.id = model.catalogId || this.id;
		this.smcPrefix = model.smcPrefix;
		this._setLayoutInfo(model.layout)
	},

	/**
	 * 设置布局信息.
	 * 
	 */
	_setLayoutInfo : function(layout) {
		// 所有的比例都测试过，不是乱写的
		switch (layout) {
			case "W" :
				this.layoutInfo.columns = 1;
				this.layoutInfo.columnSize = [1];
				break;
			case "TW" :
				this.layoutInfo.columns = 2;
				this.layoutInfo.columnSize = [0.286, 0.70];
				break;
			case "TWT" :
				this.layoutInfo.columns = 3;
				this.layoutInfo.columnSize = [0.20, 0.587, 0.20]; // 自定3列宽度比例
				break;
			case "WT" :
				this.layoutInfo.columns = 2;
				this.layoutInfo.columnSize = [0.70, 0.286];
				break;
			default :
				break;
		}
	},

	/**
	 * 构建portal.
	 */
	_buildPortal : function() {
		var portlets = this._buildPortlets();
		// 获取指定列所有portal
		function buildColumnPortlets(index) {
			var result = [];
			for (var i = 0; i < portlets.length; i++) {
				if (portlets[i].col == index) {
					result.push(portlets[i])
					portlets[i].row = result.length; // 确定portlet所在行
				}
			}
			return result;
		}

		// 添加Column
		for (var i = 1; i <= this.layoutInfo.columns; i++) {
			this.add({
						id : "column111" + i,
						columnWidth : this.layoutInfo.columnSize[i - 1],
						// style很重要padding方式,写得复杂都是为了调整适应ie6
						style : (function() {
							switch (model.layout) {
								case "W" :
									return 'padding:5px 0 5px 0';
									break;
								case "WT" :
									if (i == 1) {
										return 'padding:2px 3px 2px 0';
									}
									if (i == 2) {
										return 'padding:2px 0 2px 3px';
									}
									break;
								case "TW" :
									if (i == 1) {
										return 'padding:2px 3px 2px 0';
									}
									if (i == 2) {
										return 'padding:2px 0 2px 3px';
									}
									break;
								case "TWT" :
									if (i == 1)
										return 'padding:2px 4px 6px 0';
									if (i == 2) {
										return 'padding:2px 4px 6px 4px';
									}
									if (i == 3) {
										return 'padding:2px 0 6px 4px';
									}
									break;
								default :
									break;
							}
						})(),
						items : buildColumnPortlets(i)
					});
		}
	}, // end toPortal
	/* 构建porlets */
	_buildPortlets : function() {
		var portlets = [];
		// 将channel转换为ext portlet
		var channels = model.channels.sort(function(a, b) {
					return (a.serialNo - b.serialNo);
				});
		if (model.layout == "W") {// 处理只有中间一个W时的情况，这时要保证有且只有一个W在panel里面
			var curline = null;
			for (var i = 0; i < channels.length; i++) {
				var subLayout = channels[i].layout;
				if (subLayout == "W") {
					curline = channels[i];
				}
			}
			if (curline != null)
				portlets.push(this.__buildPortlet(curline, model.layout),
						model.layout)
		} else {
			for (var i = 0; i < channels.length; i++) {
				portlets.push(this.__buildPortlet(channels[i], model.layout),
						model.layout)
			}
		}
		return portlets
	},

	__buildPortlet : function(channel, rootLayout) {
		var layoutPortal = this.layoutInfo.columns;
		var channel_type = channel.type;
		// channel.type是非jst的情况
		if (null == channel_type || channel_type == '' || channel_type == 0
				|| channel_type == '0') {
			var defaultSrcByChannel = channel.contentUrl;
			var portletId = (function() {
				var tmp_channel_name = channel.name;
				var tmp_channel_name_point = tmp_channel_name.indexOf("@");
				if (tmp_channel_name_point > 0) {
					return tmp_channel_name.substring(tmp_channel_name_point
							+ 1);
				} else {
					return channel.name
				}
			})();
			var frameId = "iframe_" + portletId;
			var myPortletPanel_edit_ = new myPortletPanel({
				// 这一行要是注释掉，会引起不能排重的问题。
				id : portletId,
				name : channel.name,
				title : channel.title,
				type : channel_type,
				// layout : "fit",//高度自适应的问题所在
				defaultType : 'portlet',
				autoScroll : true,
				maximizeUrl : channel.maximizeUrl,
				editUrl : channel.editUrl,
				// 这个参数是为了刷新（其实是更新用的）
				refreshUrl : channel.contentUrl,
				// 此处开始处理两种情况，一种是当编辑模式时，只有关闭按钮，另一种是浏览模式时，没有关闭按钮。
				// 双击收起，展开
				titleCollapse : true,
				col : (function() { // 确定所在列, 1，2，3
					switch (rootLayout) {
						case "W" :
							return 1;
							break;
						case "WT" :
							if (channel.layout == "W")
								return 1;
							if (channel.layout == "T")
								return 2;
							break;
						case "TW" :
							if (channel.layout == "W")
								return 2;
							if (channel.layout == "T")
								return 1;
							break;
						case "TWT" :
							if (channel.layout == "W")
								return 2;
							else {
								if (channel.serialNo % 2 == 0)
									return 1;
								return 3;
							}
							break;
						default :
							break;
					}
				})(),
				contentUrl : channel.contentUrl,
				currentUrl : channel.contentUrl,
				setSrc : function(url) {
					var theIframe = document
							.getElementById("iframe_" + this.id);
					theIframe.src = (function() {
						// alert(url);
						return url;
					})();
				},
				items : [{
					frame : false,
					margins : '0 0 0 0',
					border : true,
					bodyBorder : true,
					html : '<iframe id="'
							+ frameId
							+ '"  name="'
							+ frameId
							+ '" src="'
							+ '" width="100%" height="100%" frameborder="no" border="0"'
							+ ' marginwidth="0" marginheight="0" style="border:none;"'
							+ 'scrolling="no"  allowtransparency="yes"'
							+ '></iframe>'
				}]
			});
			return myPortletPanel_edit_;
		} else if (channel_type == 1 || channel_type == '1') {
			var portletId = (function() {
				var tmp_channel_name = channel.name;
				var tmp_channel_name_point = tmp_channel_name.indexOf("@");
				if (tmp_channel_name_point > 0) {
					return tmp_channel_name.substring(tmp_channel_name_point
							+ 1);
				} else {
					return channel.name
				}
			})();
			var frameId = "iframe_" + portletId;
			var myPortletPanel_edit_1 = new myPortletPanel({
						id : portletId,
						name : channel.name,
						title : channel.title,
						defaultType : 'portlet',
						autoScroll : true,
						titleCollapse : true
					});
			var myPortletPanel_edit_ = new myPortletPanel({
				id : portletId,
				type : channel_type,
				template : channel.template,
				name : channel.name,
				title : channel.title,
				// layout : "fit",//高度自适应的问题所在
				defaultType : 'portlet',
				autoScroll : true,
				maximizeUrl : channel.maximizeUrl,
				editUrl : channel.editUrl,
				// 这个参数是为了刷新（其实是更新用的）
				refreshUrl : channel.contentUrl,
				// 此处开始处理两种情况，一种是当编辑模式时，只有关闭按钮，另一种是浏览模式时，没有关闭按钮。
				// 双击收起，展开
				titleCollapse : true,
				col : (function() { // 确定所在列, 1，2，3
					switch (rootLayout) {
						case "W" :
							return 1;
							break;
						case "WT" :
							if (channel.layout == "W")
								return 1;
							if (channel.layout == "T")
								return 2;
							break;
						case "TW" :
							if (channel.layout == "W")
								return 2;
							if (channel.layout == "T")
								return 1;
							break;
						case "TWT" :
							if (channel.layout == "W")
								return 2;
							else {
								if (channel.serialNo % 2 == 0)
									return 1;
								return 3;
							}
							break;
						default :
							break;
					}
				})(),
				contentUrl : channel.contentUrl,
				currentUrl : channel.contentUrl,
				setSrc : function(jstUrlContent, template) {
					var jstObject = eval("(" + jstUrlContent + ")");
					jstShowObject = template.process(jstObject);
					// 应当让 innerHtml里面直接展示现成的结算结果
					var innerHtml =
					// '<html>\n<body>\n' +
					jstShowObject
					// + '<body>\n</body>\n</html>'
					;
					window.frames["iframe_" + this.id].document.body.innerHTML = innerHtml;
				},
				items : [{
					frame : false,
					margins : '0 0 0 0',
					border : true,
					bodyBorder : true,
					html : '<iframe id="'
							+ frameId
							+ '"  name="'
							+ frameId
							+ '" src="'
							+ '" width="100%" height="100%" frameborder="no" border="0"'
							+ ' marginwidth="0" marginheight="0" style="border:none;"'
							+ 'scrolling="no"  allowtransparency="yes"'
							+ '></iframe>'
				}]
			});
			return myPortletPanel_edit_;
		}
	},

	/**
	 * 动态添加portlet到默认位置.
	 * 
	 * @param channel
	 */

	addDefaultPorlet : function(channel) {
		function _identify(channel) {
			var tmp_channel_name_ = channel.name;
			var tmp_channel_name_point_ = tmp_channel_name_.indexOf("@");
			if (tmp_channel_name_point_ > 0) {
				return tmp_channel_name_.substring(tmp_channel_name_point_ + 1);
			} else {
				return tmp_channel_name_
			}
		};
		// 只有前面 __buildPortlet 里面的pid起左右，才能保证没有重复添加的问题
		var pid = _identify(channel);
		var subLayout = channel.layout;
		if (Ext.getCmp(pid)) { // 判断porlet是否已经添加
			Ext.Msg
					.alert("提示:", "已经添加过了\"" + Ext.getCmp(pid).title
									+ "\"这个频道！")
			return;
		}
		var rootLayout = model.layout;
		var column = null;
		switch (rootLayout) {
			case "W" :
				if (subLayout == "W") {
					column = Ext.getCmp("column111" + 1);
					// 这句好好神奇，完成了frank给我的任务，就是当W时，有且只有一个W，后面的替换前面的一个W
					column.removeAll();
				}
				break;
			case "TW" :
				if (subLayout == "W") {
					column = Ext.getCmp("column111" + 2)
				} else {
					column = Ext.getCmp("column111" + 1)
				}
				break;
			case "TWT" :
				if (subLayout == "W") {
					column = Ext.getCmp("column111" + 2)
				} else {
					column = Ext.getCmp("column111" + 1)
				}
				break;
			case "WT" :
				if (subLayout == "W") {
					column = Ext.getCmp("column111" + 1)
				} else {
					column = Ext.getCmp("column111" + 2)
				}
				break;
			default :
				break;
		}
		// rootLayout这个参数怎么会可加可不加均可呢？
		var portletPanel = this.__buildPortlet(channel, rootLayout);
		debugObj(channel);
		column.insert(0, portletPanel);// 插入列首
		// column.add(portletPanel) //添加到列尾

		column.doLayout();
		var aa = new loadIframeContent();
		// 把刚刚加入的频道的tools屏蔽
		Ext.each(getCurPortlets(), function(tools) {
			Ext.getCmp(tools).getTool('pin').hide();
			Ext.getCmp(tools).getTool('maximize').hide();
				// Ext.getCmp(tools).getTool('close').hide();
			});
		// Ext.getCmp((getCurPortlets()[0])).getTool('maximize').hide();
	}
});